<?php

namespace app\index\controller;

use phpmailer\PHPMailer;

class Info
{
    // 获取information表所有数据
    public function select()
    {
        $return_data = array();
        if (!isset($_POST['audit_status'])) {
            $return_data['error_code'] = 2;
            $return_data['msg'] = '参数缺省，请检查';
            return json($return_data);
        }
        // 实例化数据表
        $info = db('information');
        //接收参数
        $audit_status = $_POST['audit_status'];

        //构造查询条件
        $where = array();
        $where['audit_status'] = $audit_status;

        // 根据不同审核状态返回数据
        $data = $info->where($where)->select();


        //根据查询结果给前端返回信息
        if ($data) {
            $return_data['error_code'] = 0;
            $return_data['msg'] = '查询成功';
            $return_data['data'] = $data;
        } else {
            $return_data['error_code'] = 1;
            $return_data['msg'] = '查询无结果';
        }
        return json($return_data);
    }

    // 审核失败
    public function failed_audit_status()
    {
        $return_data = array();

        if (!isset($_POST["id"]) || !isset($_POST["email"]) || !isset($_POST["name"])) {
            $return_data["error_code"] = 2;
            $return_data['msg'] = "参数缺省，请检查";
            return json($return_data);
        }


        $toemail = $_POST["email"]; //定义收件人的邮箱

        $mail = new PHPMailer();

        $mail->isSMTP(); // 使用SMTP服务
        $mail->CharSet = "utf8"; // 编码格式为utf8，不设置编码的话，中文会出现乱码
        $mail->Host = "smtp.qq.com"; // 发送方的SMTP服务器地址
        $mail->SMTPAuth = true; // 是否使用身份验证
        $mail->Username = "853137327@qq.com"; //发送方的qq邮箱用户名，就是你申请qq的SMTP服务使用的qq邮箱
        $mail->Password = "uaancpvrwzbjbbfc"; //发送方的邮箱密码，注意用qq邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码
        $mail->SMTPSecure = "ssl"; //使用ssl协议方式
        $mail->Port = 465; // qq邮箱的ssl协议方式端口号是465/587

        $mail->setFrom("853137327@qq.com", "某某大学电动车管理中心"); // 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@qq.com），Mailer是当做名字显示
        $mail->addAddress($toemail, $_POST['name']); // 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@qq.com)
        $mail->addReplyTo("853137327@qq.com", "某某大学电动车管理中心"); // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
        //$mail->addCC("xxx@qq.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
        //$mail->addBCC("xxx@qq.com");// 设置秘密抄送人(这个人也能收到邮件)
        //$mail->addAttachment("bug0.jpg");// 添加附件
        $mail->isHTML(true);
        $mail->Subject = "对不起，您的骑行证申请失败"; // 邮件标题
        $mail->Body = "可能原因：1、身份证明资料与车主提交信息不符；2、车辆来历证明资料无法核实"; // 邮件正文
        //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用

        if (!$mail->send()) { // 发送邮件
            // 邮件发送失败
            echo "Message could not be sent.";
            echo "Mailer Error: " . $mail->ErrorInfo; // 输出错误信息
            $return_data["error_code"] = 3;
            $return_data['msg'] = "邮件发送失败";
        } else {
            // 邮件发送成功
            $info = db("information");

            $where = array();
            $where['id'] = $_POST['id'];

            $data = array();
            $data['audit_status'] = -1;

            $res = $info->where($where)->update($data);
            if ($res) {
                $return_data["error_code"] = 0;
                $return_data['msg'] = "邮件发送成功，数据库信息修改成功";
            } else {
                $return_data['error_code'] = 1;
                $return_data['msg'] = "邮件发送成功，数据库信息修改成失败";
            }
        }

        return json($return_data);
    }

    // 审核通过
    public function pass_audit_status()
    {
        $return_data = array();

        if (!isset($_POST["id"]) || !isset($_POST["passport_type"]) || !isset($_POST["passport_id"]) || !isset($_POST["email"]) || !isset($_POST['name'])) {
            $return_data["error_code"] = 2;
            $return_data['msg'] = "参数缺省，请检查";
            return json($return_data);
        }

        $toemail = $_POST["email"]; //定义收件人的邮箱

        $mail = new PHPMailer();

        $mail->isSMTP(); // 使用SMTP服务
        $mail->CharSet = "utf8"; // 编码格式为utf8，不设置编码的话，中文会出现乱码
        $mail->Host = "smtp.qq.com"; // 发送方的SMTP服务器地址
        $mail->SMTPAuth = true; // 是否使用身份验证
        $mail->Username = "853137327@qq.com"; //发送方的qq邮箱用户名，就是你申请qq的SMTP服务使用的qq邮箱
        $mail->Password = "uaancpvrwzbjbbfc"; //发送方的邮箱密码，注意用qq邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码
        $mail->SMTPSecure = "ssl"; //使用ssl协议方式
        $mail->Port = 465; // qq邮箱的ssl协议方式端口号是465/587

        $mail->setFrom("853137327@qq.com", "某某大学电动车管理中心"); // 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@qq.com），Mailer是当做名字显示
        $mail->addAddress($toemail, $_POST['name']); // 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@qq.com)
        $mail->addReplyTo("853137327@qq.com", "某某大学电动车管理中心"); // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
        //$mail->addCC("xxx@qq.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
        //$mail->addBCC("xxx@qq.com");// 设置秘密抄送人(这个人也能收到邮件)
        //$mail->addAttachment("bug0.jpg");// 添加附件
        $mail->isHTML(true);
        $mail->Subject = "恭喜您骑行证申请成功"; // 邮件标题
        $mail->Body = "请在收到邮箱当天的3个工作日后领取骑行证。"; // 邮件正文
        //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用

        if (!$mail->send()) { // 发送邮件
            // 发送邮件失败
            $return_data['error_code'] = 3;
            $return_data['msg'] = "邮件发送失败";
            $return_data['reason'] = "Mailer Error: " . $mail->ErrorInfo;
        } else { //发送邮件成功
            $info = db("information");

            $where = array();
            $where['id'] = $_POST['id'];

            $data = array();
            $data['audit_status'] = 1;
            $data['passport_type'] = $_POST['passport_type'];
            $data['passport_id'] = $_POST["passport_id"];

            $res = $info->where($where)->update($data);
            if ($res) {
                $return_data["error_code"] = 0;
                $return_data['msg'] = "邮件发送成功，数据库信息修改成功";
            } else {
                $return_data['error_code'] = 1;
                $return_data['msg'] = "邮件发送成功，但数据库信息修改失败";
            }
        }


        return json($return_data);
    }

    public function select_havenot_print()
    {
        $return_data = array();

        $info = db("information");

        $where = array();
        $where['audit_status'] = 1;
        // 查询passport_type值为正式或临时的记录
        $where['passport_type'] = ['正式', '临时'];
        // 打印次数为0
        $where['havenot_print'] = 0;

        $res = $info->where($where)->select();

        if ($res) {
            $return_data['error_code'] = 0;
            $return_data['msg'] = "查询成功";
            $return_data['data'] = $res;
        } else {
            $return_data['error_code'] = 1;
            $return_data['msg'] = "没有需要颁发的骑行证啦";
        }
        return json($return_data);
    }

    // 根据字段和具体值查询数据
    public function selectAccordingToKeyValue()
    {
        $return_data = array();

        if (!isset($_POST['key']) || !isset($_POST['value'])) {
            $return_data['error_code'] = 2;
            $return_data['msg'] = "参数缺省，请检查";
        }
        $key = $_POST['key'];
        $value = $_POST['value'];
        $info = db("information");
        $where = array();
        $where[$key] = $value;
        $result = $info->where($where)->select();
        if ($result) {
            $return_data['error_code'] = 0;
            $return_data['msg'] = "查询成功";
            $return_data['length'] = sizeof($result);
        } else {
            $return_data['error_code'] = 1;
            $return_data['msg'] = "查询无结果";
        }
        return json($return_data);
    }


    // 三张车主图片资料上传
    public function uploadImgInfo()
    {
        //提前声明返回数据
        $return_data = array();

        $info = db("information");

        //传入缺省检验
        if (request()->file('img1') && request()->file('img2') && request()->file('img3')) {
            //定义$img1、img2、img3变量接收前端传来的文件
            $img1 = request()->file('img1');
            $img2 = request()->file('img2');
            $img3 = request()->file('img3');

            // $image2=request()->file('image2');

            //接收文件附属信息（即文件额外的信息）
            //接收文件附属信息（即文件额外的信息）
            $person_type = request()->post()['person_type'];
            $name = request()->post()['name'];
            $email = request()->post()['email'];
            $phone = request()->post()['phone'];
            $certificate_type = request()->post()['certificate_type'];
            $certificate_id = request()->post()['certificate_id'];
            $unit = request()->post()['unit'];
            $haveLicense = request()->post()['haveLicense'];
            $plate = request()->post()['plate'];
            $campus = request()->post()['campus'];
            $room = request()->post()['room'];
            $identification_paper_path = request()->post()['identification_paper_path'];
            $origin_evidence_path = request()->post()['origin_evidence_path'];
            $licenseTag_path = request()->post()['licenseTag_path'];

            //存储文件，定义$info参数检验存储是否成功
            //validate方法，限制文件大小、后缀名
            //move方法，第一项参数为路径，第二项参数为自定义的文件名，第三项参数为是否同名覆盖
            $result1 = $img1->validate(['size' => 5548576, 'ext' => 'jpg,jpeg,png'])->move('../public/imgInfo/' . $name, false, true); //上传目录
            $result2 = $img2->validate(['size' => 5548576, 'ext' => 'jpg,jpeg,png'])->move('../public/imgInfo/' . $name, false, true); //上传目录
            $result3 = $img3->validate(['size' => 5548576, 'ext' => 'jpg,jpeg,png'])->move('../public/imgInfo/' . $name, false, true); //上传目录

            if ($result1 && $result2 && $result3) {
                // 成功上传后 获取上传信息

                // // 输出 文件扩展名
                // echo $info1->getExtension();

                // // 输出 大概的文件路径
                // echo $info1->getSaveName();

                // // 输出 文件名.jpg
                // echo $info1->getFilename();

                //构造返回数据

                $data = array();

                $data["person_type"] = $person_type;
                $data["name"] = $name;
                $data["email"] = $email;
                $data["phone"] = $phone;
                $data["certificate_type"] = $certificate_type;
                $data["certificate_id"] = $certificate_id;
                $data["unit"] = $unit;
                $data["haveLicense"] = $haveLicense;
                $data["plate"] = $plate;
                $data["campus"] = $campus;
                $data["room"] = $room;
                $data["identification_paper_path"] = $identification_paper_path;
                $data["origin_evidence_path"] = $origin_evidence_path;
                $data["licenseTag_path"] = $licenseTag_path;


                $info = db("information")->insert($data);
                if ($info) {
                    $return_data['error_code'] = 0;
                    $return_data['msg'] = '信息和资料上传成功！';
                } else {
                    $return_data['error_code'] = 1;
                    $return_data['msg'] = '信息上传失败，请重新提交';
                }
            } else {
                // 上传失败获取错误信息
                // echo $image1->getError();

                //构造返回数据
                $return_data['error_code'] = 2;
                $return_data['msg1'] = $img1->getError();
                $return_data['msg2'] = $img2->getError();
                $return_data['msg3'] = $img3->getError();
            }
        } else if (request()->file('img1') && request()->file('img2')) {
            //定义$img1、img2、img3变量接收前端传来的文件
            $img1 = request()->file('img1');
            $img2 = request()->file('img2');


            // $image2=request()->file('image2');

            //接收文件附属信息（即文件额外的信息）
            $person_type = request()->post()['person_type'];
            $name = request()->post()['name'];
            $email = request()->post()['email'];
            $phone = request()->post()['phone'];
            $certificate_type = request()->post()['certificate_type'];
            $certificate_id = request()->post()['certificate_id'];
            $unit = request()->post()['unit'];
            $haveLicense = request()->post()['haveLicense'];
            $plate = request()->post()['plate'];
            $campus = request()->post()['campus'];
            $room = request()->post()['room'];
            $identification_paper_path = request()->post()['identification_paper_path'];
            $origin_evidence_path = request()->post()['origin_evidence_path'];
            $licenseTag_path = request()->post()['licenseTag_path'];


            //存储文件，定义$info参数检验存储是否成功
            //validate方法，限制文件大小、后缀名
            //move方法，第一项参数为路径，第二项参数为自定义的文件名，第三项参数为是否同名覆盖

            $result1 = $img1->validate(['size' => 5548576, 'ext' => 'jpg,jpeg,png'])->move('../public/imgInfo/' . $name, false, true); //上传目录
            $result2 = $img2->validate(['size' => 5548576, 'ext' => 'jpg,jpeg,png'])->move('../public/imgInfo/' . $name, false, true); //上传目录

            if ($result1 && $result2) {
                // 成功上传后 获取上传信息

                // // 输出 文件扩展名
                // echo $info1->getExtension();

                // // 输出 大概的文件路径
                // echo $info1->getSaveName();

                // // 输出 文件名.jpg
                // echo $info1->getFilename();

                $data = array();

                $data["person_type"] = $person_type;
                $data["name"] = $name;
                $data["email"] = $email;
                $data["phone"] = $phone;
                $data["certificate_type"] = $certificate_type;
                $data["certificate_id"] = $certificate_id;
                $data["unit"] = $unit;
                $data["haveLicense"] = $haveLicense;
                $data["plate"] = $plate;
                $data["campus"] = $campus;
                $data["room"] = $room;
                $data["identification_paper_path"] = $identification_paper_path;
                $data["origin_evidence_path"] = $origin_evidence_path;
                $data["licenseTag_path"] = $licenseTag_path;


                $info = db("information")->insert($data);
                if ($info) {
                    $return_data['error_code'] = 0;
                    $return_data['msg'] = '信息和资料上传成功！';
                } else {
                    $return_data['error_code'] = 1;
                    $return_data['msg'] = '信息上传失败，请重新提交';
                }
            } else {
                // 上传失败获取错误信息
                // echo $image1->getError();

                //构造返回数据
                $return_data['error_code'] = 2;
                $return_data['msg1'] = $img1->getError();
                $return_data['msg2'] = $img2->getError();
            }
        } else {
            //组装返回数据
            $return_data['error_code'] = 3;
            $return_data['msg'] = '参数缺省，请检查';
        }

        //返回数据
        return json($return_data);
    }
}
